<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <meta http-equiv="Content-Style-Type" content="text/css" />
  <meta name="generator" content="pandoc" />
  <title>vim的使用</title>
  <style type="text/css">code{white-space: pre;}</style>
  <style type="text/css">
div.sourceCode { overflow-x: auto; }
table.sourceCode, tr.sourceCode, td.lineNumbers, td.sourceCode {
  margin: 0; padding: 0; vertical-align: baseline; border: none; }
table.sourceCode { width: 100%; line-height: 100%; }
td.lineNumbers { text-align: right; padding-right: 4px; padding-left: 4px; color: #aaaaaa; border-right: 1px solid #aaaaaa; }
td.sourceCode { padding-left: 5px; }
code > span.kw { color: #007020; font-weight: bold; } /* Keyword */
code > span.dt { color: #902000; } /* DataType */
code > span.dv { color: #40a070; } /* DecVal */
code > span.bn { color: #40a070; } /* BaseN */
code > span.fl { color: #40a070; } /* Float */
code > span.ch { color: #4070a0; } /* Char */
code > span.st { color: #4070a0; } /* String */
code > span.co { color: #60a0b0; font-style: italic; } /* Comment */
code > span.ot { color: #007020; } /* Other */
code > span.al { color: #ff0000; font-weight: bold; } /* Alert */
code > span.fu { color: #06287e; } /* Function */
code > span.er { color: #ff0000; font-weight: bold; } /* Error */
code > span.wa { color: #60a0b0; font-weight: bold; font-style: italic; } /* Warning */
code > span.cn { color: #880000; } /* Constant */
code > span.sc { color: #4070a0; } /* SpecialChar */
code > span.vs { color: #4070a0; } /* VerbatimString */
code > span.ss { color: #bb6688; } /* SpecialString */
code > span.im { } /* Import */
code > span.va { color: #19177c; } /* Variable */
code > span.cf { color: #007020; font-weight: bold; } /* ControlFlow */
code > span.op { color: #666666; } /* Operator */
code > span.bu { } /* BuiltIn */
code > span.ex { } /* Extension */
code > span.pp { color: #bc7a00; } /* Preprocessor */
code > span.at { color: #7d9029; } /* Attribute */
code > span.do { color: #ba2121; font-style: italic; } /* Documentation */
code > span.an { color: #60a0b0; font-weight: bold; font-style: italic; } /* Annotation */
code > span.cv { color: #60a0b0; font-weight: bold; font-style: italic; } /* CommentVar */
code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Information */
  </style>
  <link rel="stylesheet" href="doc/linux-style.css" type="text/css" />
</head>
<body>
<div id="header">
<h1 class="title">vim的使用</h1>
</div>
<div id="TOC">
<ul>
<li><a href="#vim的使用">vim的使用</a></li>
</ul>
</div>
<h1 id="vim的使用">vim的使用</h1>
<p><a href="https://www.runoob.com/linux/linux-vim.html">Vim编辑器菜鸟教程</a></p>
<p><a href="https://yianwillis.github.io/vimcdoc/doc/quickref.html">Vim官方手册中文版</a></p>
<p>作为一个linux内核开发工作者，vim真的必须得学会掌握。这里我列举几个常用的：</p>
<ul>
<li><strong>基础操作</strong></li>
</ul>
<div class="sourceCode"><pre class="sourceCode sh"><code class="sourceCode bash">:<span class="ex">w</span>      #保存文件
:<span class="ex">wq</span>或zz      #保存并退出
<span class="ex">x</span>       #删除光标所在字符 
<span class="fu">dd</span>          #删除当前行
<span class="ex">gg</span>      #定位到首行
<span class="ex">u</span>       #撤回操作
[<span class="ex">Ctrl</span>]+r      #重做上一个动作。
:<span class="ex">5</span>,10d      #删除5到10行
<span class="ex">ctrl</span> + f  #屏幕<span class="st">&#39;向下&#39;</span>移动一页
<span class="ex">ctrl</span> + b   #    屏幕<span class="st">&#39;向上&#39;</span>移动一页
<span class="ex">0</span> 或功能键[Home]    #这是数字： 0 “：移动到这一行的最前面字符处 
$ 或功能键[<span class="ex">End</span>]     #移动到这一行的最后面字符处
<span class="ex">G</span>      #将文件移动到此文件的最后一行
<span class="ex">n</span><span class="op">&lt;</span>Enter<span class="op">&gt;</span>    #n 为数字。 光标向下移动 n 行


<span class="ex">/keyword</span>    #向下搜索 keyword
<span class="ex">?keyword</span>    #向上搜索 keyword
:<span class="ex">n1</span>,n2s/word1/word2/g   #n1 与 n2 为数字。 在 n1 和 n2 行之间寻找 word1 这个字符串， 并将该字符串替换为 word2 ！ 举例来说，在 100 到 200 行之间搜寻 cird 并取代为 VBIRD 则：
『:<span class="ex">100</span>,200s/vbird/VBIRD/g』。
:<span class="ex">1</span>,<span class="va">$s</span>/word1/word2/g  #从第一行到最后一行查找 word1 字符串，并将该字符串替换为 word2 

<span class="ex">r</span> <span class="co">#进入取代模式</span>

<span class="ex">Ctrl</span> + Z    #挂起 Vim 到后台
<span class="bu">fg</span>      #从后台恢复 Vim</code></pre></div>
<ul>
<li><strong>vim阅读源码</strong></li>
</ul>
<p>vim还有一个高级的用法就是用vim阅读内核源码：首先需要在根目录下执行<code>ctags -R</code> 这个命令会生成索引文件，<code>ls -l tags</code>查看索引文件。</p>
<p>找不到需要下载ctags，运行<code>sudo apt-get install exuberant-ctags</code></p>
<div class="sourceCode"><pre class="sourceCode sh"><code class="sourceCode bash">然后<span class="ex">vim</span>中：
<span class="ex">1.ctrl</span> + ] <span class="co">#跳转到函数或者变量的定义</span>
<span class="ex">2.</span> ctrl + o <span class="co">#返回到原来的位置</span>
<span class="ex">3.</span> g ctrl +] <span class="co">#跳转到函数或者变量的定义，这个比第一个多一个选择。</span></code></pre></div>
<ul>
<li><strong>vim的暂存档</strong></li>
</ul>
<p>当你某次用某个进程编辑vim的时候，可能因为网络问题或者中断问题，没有保存vim的编辑内容。</p>
<p>但是vim会自动保存一个xxx.swp文件，以实现内容暂存。再一次用vim打开这个文件的时候，可以按下如下按键：</p>
<div class="sourceCode"><pre class="sourceCode sh"><code class="sourceCode bash"><span class="ex">R</span>：加载暂存文档的内容；D：删除暂存文档的内容；O：打开此文件为只读文件；</code></pre></div>
<ul>
<li><strong>vim还可以实现多文件编辑</strong></li>
</ul>
<div class="sourceCode"><pre class="sourceCode sh"><code class="sourceCode bash"><span class="ex">vim</span> 1.txt 2.txt 3.txt <span class="co">#可以用vim一次性打开三个文件</span>
<span class="co">#然后有如下指令查看</span>
:<span class="ex">n</span>  #编辑下一个文件
:<span class="ex">N</span>  #编辑下一个文件
:<span class="ex">files</span>    #列出目前这个 vim 的开启的所有文件</code></pre></div>
<ul>
<li><strong>vim的多窗口编辑</strong></li>
</ul>
<div class="sourceCode"><pre class="sourceCode sh"><code class="sourceCode bash">:<span class="ex">vsp</span>  #水平分割 上下两个窗口
:<span class="ex">sp</span>   #垂直分割 左右两个窗口</code></pre></div>
<ul>
<li><strong>vim复制到系统剪贴板</strong></li>
</ul>
<div class="sourceCode"><pre class="sourceCode sh"><code class="sourceCode bash"><span class="fu">sudo</span> apt update
<span class="fu">sudo</span> apt install vim-gtk   #安装支持剪贴板的 Vim 版本
:<span class="ex">echo</span> has(<span class="st">&#39;clipboard&#39;</span>)   #现在应该返回 <span class="ex">1</span>
:<span class="ex">version</span>              #  查看是否包含 +clipboard

<span class="st">&quot;+y              #复制选中内容到剪贴板    </span>
<span class="st">&quot;</span><span class="ex">+p</span>              #粘贴剪贴板内
<span class="st">&quot;+yy             #复制整行  </span>
<span class="st">:%y+             #复制整个文件    </span></code></pre></div>
<ul>
<li><strong>~/.vimrc的一些配置</strong></li>
</ul>
<div class="sourceCode"><pre class="sourceCode sh"><code class="sourceCode bash"><span class="kw">set</span> <span class="ex">number</span>              <span class="st">&quot;显示行号</span>
<span class="st">syntax on               &quot;</span>语法高亮
<span class="kw">set</span> <span class="ex">paste</span>               <span class="st">&quot;粘贴不自动缩进</span>
<span class="st">set ruler               &quot;</span>右下角显示位置
<span class="kw">set</span> <span class="ex">hlsearch</span>            <span class="st">&quot;搜索高亮</span>
<span class="st">set fdm=indent          &quot;</span>indent缩进折叠，syntax语法折叠
<span class="kw">set</span> <span class="va">pastetoggle=</span><span class="op">&lt;</span><span class="ex">F9</span><span class="op">&gt;</span>    <span class="st">&quot;F9粘贴设置切换</span>
<span class="st">set mouse-=a                    &quot;</span>鼠标选择文字不会进入visual模式
<span class="kw">set</span> <span class="ex">ic</span>                  <span class="st">&quot;set ic忽略大小写(ignore case), set noic 不忽略大小写</span>
<span class="st">set cscopequickfix=a-,c-,d-,e-,f-,g-,i-,s-,t- &quot;</span>cscope打开quickfix窗口
<span class="st">&quot;set ts=4                &quot;</span>一个<span class="ex">tab</span>键等于4个空格宽度
<span class="st">&quot;set sw=4                &quot;</span>按<span class="op">&lt;</span>键和<span class="op">&gt;</span>键缩进时，移动<span class="ex">4</span>个空格
<span class="st">&quot;set expandtab           &quot;</span><span class="ex">tab</span>转化为空格
<span class="st">&quot;colorscheme desert      &quot;</span>支持的<span class="ex">color</span>查看/usr/share/vim/vim82/colors/（vim82是vim版本）</code></pre></div>
</body>
</html>
